Selene Shepard поделилась ссылкой
17 ноября 2013 года, 14:15
#11632: Все точки под ковёр
А вот вам очередной технобаян о том, как Этот® Народ™ Не Победить. Даже ту его часть, что давно уже сдала свой старенький использованный трактор на донейшенс для такс-ката, потому что моргидж и старшего надо в каледж.

Как-то так исторически сложилось, что девелопмент (Шишков, прости…) в нашей шараге как-то чуть более чем полностью состоит из русских и индусов. Да так, что и китайцев-то на нашем фоне мелко видно, а бедные америкосы и вовсе в меньшинстве. И насмотрелся я кода не только знаменитого индусского (наши рабиндранат-тагоры пишут довольно грамотно, но всё равно стиль узнаваемый), но и Могучего Русского Кода. Осмысленность варьируется, но беспощадность местами зашкаливает.

Пишем C/C++ код, который одновременно должен работать и на юниксах, и на виндюках. Потому есть специальные люди, что пишут обёртки для платформозависимых API, чтобы у народа код не состоял из сплошных #ifdef __WIN32. Вот, допустим, bool acmeMkDir(char* dir), который понятно чего делает: пытается создать фолдер, используя родные для платформы API. И возвращает понятно что.

И вот картина салом. Приходит мне баг. Который — долго объяснять как, но упирается в этот самый acmeMkDir(), которому на вход подают «foo.» или «bar ». Юниксу-то что, ему горшком назови, только эскейпы расставь. А на виндузе он, собака такая, создает «foo» или «bar». И, радостно виляя хвостиком, возвращает true. Зацени, хозяин, какой я умный: «foo.» или «bar » произносить я не умею, но так даже лучше! Правда вот, все последующие попытки читать-писать некий foo./bar.txt заканчиваются неоднозначно.

Ну что — ставлю у себя заплатку (ибо починить надо вчера), отдаю баг Серёге, хозяину acmeMkDir():): мол, почини (возвращай false, ибо имя воистину кривое) и свистни — я заплатку-то и уберу. A он поясняет, что это, зараза, виндузовые API так выёживаются, но починка будет.

Короче, можете сами, если виндуза под рукою, попробовать создать «foo.» или «bar » Эксплорером или mkdir — сами увидите, как какая-то тефаль думает за вас и заботливо убирает хвостовые пробелы и точки. Как же, в MS-DOS есть имя, а есть расширение, и «file» — это на самом деле «file.», только точка мозолит глаза, мы её заметем под ковёр. Пофиг, что лет уж двадцать как MS-DOS мёртв, а я ещё нет^H^H^Hвоз и ныне там.

Вчера, довольный, как слон, молвит Серега: починил! Наплясался с бубном, но заставил-таки эту хню создавать папки «foo.» или «bar ». И наши завёртки типа acmeFileOpen() с ними живут ОК. Правда вот, в Эксплорере в эти папки хрен зайдёшь. Ну, и винзипы-винрары всякие непонятно как это возьмут. Так что сам решай, оставлять ли тебе твою заплатку. Но лучше оставь.

Левша, блин, хренов. Подковал блоху, спору нет.